package com.bestcem.xm.ticket.grpc.client.dto.user;

import com.bestcem.xm.ticket.enums.OrganizationFooterEnum;
import com.bestcem.xm.ticket.enums.OrganizationSourceEnum;
import com.bestcem.xm.ticket.enums.OrganizationStatusEnum;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 组织DTO
 *
 * @author ympan <yuming.pan@idiaoyan.com>
 * @version v1.0
 * @date 2021/8/27 11:29
 */
@Getter
@Setter
@ToString
public class OrganizationDTO {
    /**
     * 组织
     */
    private String id;

    /**
     * 组织编码
     */
    private String code;

    /**
     * 组织名称
     */
    private String name;

    /**
     * 备注
     */
    private String content;

    /**
     * 组织状态 {@link OrganizationStatusEnum}
     */
    private Integer status;

    /**
     * 账号来源 {@link OrganizationSourceEnum}
     */
    private Integer source;

    /**
     * 账号来源详情
     */
    private String sourceRemark;

    /**
     * 根组ID
     * FIXME: 注意, 这个字段从 List<String> 改成 String 了
     */
    private String rootGroupId;

    /**
     * 行业ID
     */
    private String industryId;

    /**
     * 当前正在试用套餐ID
     */
    private String packageId;

    /**
     * 正式套餐
     */
    private String formalPackageId;

    /**
     * 正式套餐到期时间
     */
    private LocalDateTime formalExpiryDateTime;

    /**
     * 试用套餐ID
     */
    private String trialPackageId;

    /**
     * 试用套餐到期时间
     */
    @JsonDeserialize(using = LocalDateTimeDeserializer.class) // 反序列化
    @JsonSerialize(using = LocalDateTimeSerializer.class) // 序列化
    private LocalDateTime trialExpiryDateTime;

    /**
     * 公司联系人邮箱
     */
    private String email;

    /**
     * 公司联系人手机号
     */
    private String mobile;

    /**
     * 公司套餐过期日期
     */
    @JsonDeserialize(using = LocalDateTimeDeserializer.class) // 反序列化
    @JsonSerialize(using = LocalDateTimeSerializer.class) // 序列化
    private LocalDateTime expiryDateTime;

    /**
     * 免费时间限制，主要对部分功能做时间限制
     */
    @JsonDeserialize(using = LocalDateTimeDeserializer.class) // 反序列化
    @JsonSerialize(using = LocalDateTimeSerializer.class) // 序列化
    private LocalDateTime freeExpiryDateTime;

    /**
     * RSA公钥文件路径
     */
    private String publicKey;

    /**
     * RSA私钥ID
     */
    private String privateKeyId;

    /**
     * 是否开启投放审核
     */
    private boolean isDeliverCheck;

    /**
     * 是否完善信息
     */
    private boolean isComplete;

    /**
     * 管理员账号名
     */
    private String orgAdmin;

    /**
     * 企业钱包id
     */
    private String corporateWallet;

    /**
     * 短信单价 单位分
     */
    private Integer smsPrice;

    /**
     * 品牌露出 {@link OrganizationFooterEnum}
     */
    private Integer footer;

    /**
     * 审核使用的smtp id
     */
    private String checkSmtpId;

    /**
     * 是否向销售发送用户信息
     */
    private boolean hasNotifySales;

    /**
     * 是否是内部公司
     */
    private boolean isInner;

    /**
     * 前端PaaS配置
     */
    private String paasConf;

    /**
     * Skin
     */
    private Skin skin;

    @lombok.Data
    public static class Skin implements Serializable {

        private static final long serialVersionUID = -6154874926351185513L;

        private String status;

        private LoginBgImg loginBgImg;

        private String loginColor;

        private String logo;

        private String name;

        private String title;

        private Boolean hideLoginChanger;

        private Boolean hideUserCenter;

        @lombok.Data
        public static class LoginBgImg implements Serializable {
            private static final long serialVersionUID = -6114874926351185513L;

            private String filePath;

            private String id;
        }
    }
}
